home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / blit.arc / PASS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-23  |  2.2 KB  |  79 lines

  1. /*
  2.  * name:         pass
  3.  *
  4.  * description: create a rectangle/bitmap pair list.
  5.  *
  6.  * synopsis:     pass (lp, r, sb, op, l, p2, p3, p4)
  7.  *              struct layer    *lp;
  8.  *              struct rectangle    *r;
  9.  *              struct bitmap   *sb;
  10.  *              struct obscured *op;
  11.  *              struct listelement **l;
  12.  *              int     *p2;
  13.  *              int     *p3;
  14.  *              int     *p4;
  15.  *
  16.  * globals:      none.
  17.  *
  18.  * calls:        lessthan  (lessthan.c)
  19.  *              malloc     (libc)
  20.  *
  21.  * called by:    lbitblt  (lbitblt.c)
  22.  */
  23. #include "layers.h"
  24.  
  25. pass (lp, r, sb, op, l, p2, p3, p4)
  26. struct layer  *lp;
  27. struct rectangle  *r;
  28. struct bitmap *sb;
  29. struct obscured *op;
  30. struct listelement **l;
  31. int   *p2;                             /* unused */
  32. int   *p3;                             /* unused */
  33. int   *p4;                             /* unused */
  34. {
  35.    struct listelement *e;
  36.    struct listelement *pe;
  37.    struct listelement *newe;
  38.  
  39.    char    *malloc ();
  40.  
  41.     pe = null;
  42.    for (e = *l; e != null; e = e -> lst_next) {/* e = each element of l */
  43.        if (!lessthan (r, &(e -> lst_rect))) {
  44.        /*
  45.         * insert {sb,r} into l before e;
  46.         */
  47.            newe = (struct listelement *)
  48.                   malloc ((unsigned) sizeof (struct listelement));
  49.            newe -> lst_bp = sb;
  50.            newe -> lst_rect.origin.x = r -> origin.x;
  51.            newe -> lst_rect.origin.y = r -> origin.y;
  52.            newe -> lst_rect.corner.x = r -> corner.x;
  53.            newe -> lst_rect.corner.y = r -> corner.y;
  54.            newe -> lst_next = e;
  55.            if (pe != null)
  56.                pe -> lst_next = newe;
  57.            else
  58.                *l = newe;
  59.            return;
  60.        }
  61.         pe = e;
  62.    }
  63.  /*
  64.  * append {sb,r} to l;
  65.  */
  66.    newe = (struct listelement *)
  67.           malloc ((unsigned) sizeof (struct listelement));
  68.    newe -> lst_bp = sb;
  69.    newe -> lst_rect.origin.x = r -> origin.x;
  70.    newe -> lst_rect.origin.y = r -> origin.y;
  71.    newe -> lst_rect.corner.x = r -> corner.x;
  72.    newe -> lst_rect.corner.y = r -> corner.y;
  73.    newe -> lst_next = null;
  74.    if (pe != null)
  75.        pe -> lst_next = newe;
  76.    else
  77.        *l = newe;
  78. }
  79.